home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk8 / superlib / libsrc / bset.asm < prev    next >
Assembly Source File  |  1995-03-18  |  997b  |  47 lines

  1.  
  2. ;BSET.ASM
  3. ;BZERO.ASM
  4. ;
  5. ;   Uses longword operations if data is aligned on a longword boundry
  6. ;   and the size is a mulitple of 4.  Otherwise, uses byte operations.
  7.  
  8. xdef  _bset
  9. xdef  _bzero
  10.  
  11. _bzero
  12. clr.lD1
  13. brabegin
  14. _bset
  15. move.b15(A7),D1;12(A7)-> msb . . lsb(D1 = data)
  16. begin
  17. move.l4(A7),A0;A0 = address
  18. move.l8(A7),D0;D0 = byte count
  19. andi.b#3,11(A7);byte count on long word boundry?
  20. bnedrop
  21. andi.b#3,7(A7);address on longword boundry?
  22. bnedrop
  23. bralwb
  24. loopmove.bD1,(A0)+;BYTE SET LOOP
  25. dropdbf.wD0,loop ;remember, only effects lower word
  26. sub.l#$10000,D0;for buffers >65535
  27. bplloop;branch to loop because D0.W now is FFFF
  28. rts
  29.  
  30. lwblsr.l#2,D0;byte count / 4 (longword chunks)
  31. tst.lD1;BZERO
  32. beqdropl
  33. move.bD1,14(A7);15(A7) already contains the byte
  34. move.w14(A7),D1;D1 0..15 set
  35. swapD1
  36. move.w14(A7),D1;D1 16..31 set
  37. bradropl
  38.  
  39. looplmove.lD1,(A0)+;BYTE SET LOOP
  40. dropldbf.wD0,loopl;remember, only effects lower word
  41. sub.l#$10000,D0;for buffers >65535
  42. bplloopl;branch to loop because D0.W now is FFFF
  43. rts
  44.  
  45.  
  46.  
  47.